package Gestores.DtoObjects;

import Gestores.DaoInterfaces.DetalleEgresoDAO;
import Gestores.DataBaseLink;
import Gestores.Entidades.EntidadCuentaPago;
import Gestores.Entidades.EntidadDetalleEgreso;
import Gestores.Entidades.EntidadPagoCertificado;
import Gestores.NucleoBaseDatos;
import java.sql.Date;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

public class DetalleEgresoDTO implements DetalleEgresoDAO {

    private DataBaseLink conn;

    public DetalleEgresoDTO() {
        conn = NucleoBaseDatos.getInstance();

    }

    @Override
    public ArrayList<Object> buscarPorUsuario(int codu)throws Exception {
        String comando ="call BuscarDetalleEgresoUsuario("+String.valueOf(codu)+");";
        ResultSet resultado= this.conn.executeSql(comando);
        return devolverListaCargadaBusqueda(resultado);  
        
    }

    @Override
    public ArrayList<Object> buscarPorIdDetalle(int id) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public Object buscarDetalleEgreso(int codu, int id) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public void insertar(Object objeto) throws Exception {
        EntidadDetalleEgreso entidad = (EntidadDetalleEgreso) objeto;
        String comando = "call InsertarDetalleEgreso(" + String.valueOf(entidad.getId_usuario()) + ","
                + String.valueOf(entidad.getId_cuenta()) + "," + String.valueOf(entidad.getMonto())
                + ",'" + entidad.getFecha().toString() + "');";
        this.conn.executeSql(comando);
    }

    @Override
    public void actualizar(Object primaryKey, Object objeto) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public void eliminacionLogica(Object objeto) throws Exception {
        //EliminacionLogicaDetallePago(cu int,u int,id int)
        EntidadDetalleEgreso e=(EntidadDetalleEgreso)objeto;
        String comando ="call EliminacionLogicaDetallePago("+String.valueOf(e.getId_cuenta())+","+
                String.valueOf(e.getId_usuario())+","+String.valueOf(e.getId())+");";
        this.conn.executeSql(comando);
    }

    @Override
    public void eliminacionFisica(Object objeto) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public ArrayList<Object> listarTabla() {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public ArrayList<Object> buscarPorCuenta(int cuenta) throws Exception {
        String comando ="call BuscarDetalleEgresoCuenta("+String.valueOf(cuenta)+");";
        ResultSet resultado= this.conn.executeSql(comando);
        return devolverListaCargadaBusqueda(resultado);
    }

    @Override
    public ArrayList<Object> buscarPorFecha(String f) throws Exception {
        String comando ="call BuscarDetalleEgresoFecha('"+f+"');";
        ResultSet resultado= this.conn.executeSql(comando);
        return devolverListaCargadaBusqueda(resultado);
    }
    private ArrayList<Object> devolverListaCargadaBusqueda(ResultSet resultado) throws SQLException {
        ArrayList<Object> lista = new ArrayList<Object>();
            
        while (resultado.next()) {
             EntidadDetalleEgreso eDetalle = new EntidadDetalleEgreso();
             eDetalle.setCuenta(resultado.getString(1));
             eDetalle.setMonto(resultado.getFloat(2));
             eDetalle.setFecha(resultado.getDate(3));
             eDetalle.setUsuario(resultado.getString(4));
             eDetalle.setId(resultado.getInt(5));
             eDetalle.setId_cuenta(resultado.getInt(6));
             eDetalle.setId_usuario(resultado.getInt(7));
            lista.add(eDetalle);
        }
        return lista;
    }

    @Override
    public ArrayList<Object> buscarPorMonto(float m) throws Exception {
        String comando ="call BuscarDetalleEgresoMonto("+m+");";
        ResultSet resultado= this.conn.executeSql(comando);
        return devolverListaCargadaBusqueda(resultado);
    }

    @Override
    public ArrayList<Object> buscarDetalleEgresoTodosCriterios(int cuenta, int usua, Date d, float m) throws Exception {
        //BuscarDetallePago(cu int,u int,f date,m float)
        String comando ="call BuscarDetalleEgreso("+String.valueOf(cuenta)+","+
                String.valueOf(usua)+",'"+d.toString()+"',"+String.valueOf(m)+");";
        ResultSet resultado= this.conn.executeSql(comando);
        return devolverListaCargadaBusqueda(resultado);
    }
}
